﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AcadPos.Entity;
using TrustX.Dados;
using System.Data;

namespace AcadPos.Data
{
    public class DBModulo
    {
        #region Inserir
        public bool inserir(Modulo modulo, string usuario)
        {
            string SQL = @" INSERT INTO TB_MODULO
                                        (
                                        DESCRICAO,
                                        SITUACAO,
                                        DATA_CADASTRO
                                        )
                                    VALUES
                                        (
                                        UPPER(@DESCRICAO),
                                        @SITUACAO,
                                        GETDATE()
                                        )";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
            //return db.ExecuteNonQuery();
            
            bool inseriu = db.ExecuteNonQuery();
            
            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_MODULO',
                        ((SELECT CAST(MAX(ID_MODULO) AS VARCHAR) FROM TB_MODULO)
                        + ' | ' + UPPER(@DESCRICAO) 
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_MODULO", SqlDbType.Int, modulo.IdModulo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar
        public bool alterar(Modulo modulo, string usuario)
        {
            string SQL = @"UPDATE TB_MODULO
                                    SET    DESCRICAO = UPPER(@DESCRICAO),
                                           SITUACAO = @SITUACAO
                                    WHERE  ID_MODULO = @ID_MODULO";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
            db.AddParam("@ID_MODULO", SqlDbType.Int, modulo.IdModulo);
            //return db.ExecuteNonQuery();
            
            bool atualizou = db.ExecuteNonQuery();
            
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_MODULO',
                        (CAST(@ID_MODULO AS VARCHAR)
                        + ' | ' + UPPER(@DESCRICAO) 
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_MODULO", SqlDbType.Int, modulo.IdModulo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;

        }
        #endregion

        #region Excluir
        public bool excluir(Modulo modulo, string usuario)
        {
            string SQL = @"DELETE 
                                FROM   TB_MODULO
                                WHERE  ID_MODULO = @ID_MODULO";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_MODULO", SqlDbType.Int, modulo.IdModulo);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
            //return db.ExecuteNonQuery();
            
            bool excluiu = db.ExecuteNonQuery();
            
            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_MODULO',
                        (CAST(@ID_MODULO AS VARCHAR)
                        + ' | ' + UPPER(@DESCRICAO) 
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_MODULO", SqlDbType.Int, modulo.IdModulo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, modulo.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return excluiu;

        }
        #endregion

        #region Listar Modulos
        public DataTable listarModulos(Modulo modulo)
        {
            string SQL = @"SELECT  tm.ID_MODULO,
                                   tm.DESCRICAO,
                                   tm.SITUACAO
                            FROM   TB_MODULO tm";


            if (modulo.Descricao != "")
                SQL += "  WHERE UPPER(tm.DESCRICAO) LIKE '%' + UPPER(@DESCRICAO) + '%' ";

            SQL += " ORDER BY tm.DESCRICAO";

            DataAccess db = new DataAccess(SQL);
            if (modulo.Descricao != "")
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Modulo Existente
        public DataTable moduloJaExiste(Modulo modulo)
        {
            string SQL = @"SELECT  tm.ID_MODULO                                   
            
                            FROM   TB_MODULO tm";

            if (modulo.Descricao != "")
                SQL += "  WHERE UPPER(tm.DESCRICAO) = UPPER(@DESCRICAO) ";

            SQL += " ORDER BY tm.DESCRICAO";

            DataAccess db = new DataAccess(SQL);
            if (modulo.Descricao != "")
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, modulo.Descricao);
            return db.GetDataTable();
        }
        #endregion
    }
}
